Coreデバイスのテレメトリデータ収集が簡単に!Greengrass Core 1.11.0がリリースされました
はじめに
CX事業本部@大阪の岩田です。
2020/9/18付けでGreengrass Core 1.11.0がリリースされました。
このブログではGreengrass Core 1.11.0から追加された新機能について紹介させて頂きます。
Greengrass core 1.11.0の新機能
以下の機能が追加されています。
- テレメトリデータを収集し、クラウドに送信する機能の追加
- Coreデバイス上で実行可能なローカルHTTP APIの追加
- ストリームマネージャーのデータ出力先としてS3とIoT SiteWiseのサポートを追加
- ローカルLambdaのランタイムとしてPython3.8のサポートを追加
- 設定ファイル(config.json)にパラメータ追加
- Greengrass Groupごとに設定可能なデバイス数とサブスクリプション数の上限が増加
それぞれ詳細を見ていきましょう。
テレメトリデータの収集
Coreデバイス上でメモリ使用量やCPU使用率といったテレメトリデータを定期的に収集し、クラウドに送信する機能が追加されました。収集されるメトリクスの一覧は以下のドキュメントを参考にして下さい。
https://docs.aws.amazon.com/greengrass/latest/developerguide/telemetry.html
テレメトリデータは1時間ごとに収集され、予約済みのMQTTトピックを介して24時間ごとにクラウドに送信されます。クラウド側ではEventBridgeのルールを定義することで受け取ったテレメトリデータをもとに諸々の処理を実行することができます。
24時間ごとの送信ということなので、まだ実際の動作は確認できていないのですが、マネコンを見ると色々と設定可能になっていることが分かります。
Coreデバイス上で実行可能なローカルHTTP API
Coreデバイス上のhttp://localhost:<ポート番号>/2016-11-01/health/workers
というエンドポイントで、Greengrassの各種ワーカープロセスのヘルスチェックが可能なローカルのHTTP APIが提供されるようになりました。※ポート番号は後述のggDaemonPort
で設定されたポートになります。
このエンドポイントに対してGETリクエストを発行することで全ワーカーのヘルス情報が取得可能です。試しに実行してみます。
$ curl http://localhost:8000/2016-11-01/health/workers
以下のレスポンスが返却されました。
[ { "FuncArn": "arn:aws:lambda:::function:GGSecretManager:1", "WorkerId": "04fa110b-5478-4f1c-71c8-f830b7e15d7b", "ProcessId": 4960, "WorkerState": "Waiting" }, { "FuncArn": "arn:aws:lambda:::function:GGCloudSpooler:1", "WorkerId": "9d08489c-9b37-49dc-6dcf-d205c20cc63f", "ProcessId": 5005, "WorkerState": "Waiting" }, { "FuncArn": "arn:aws:lambda:::function:GGShadowSyncManager", "WorkerId": "0be5126e-1b89-4c71-7d30-ee319dc4dbfe", "ProcessId": 5233, "WorkerState": "Waiting" }, { "FuncArn": "arn:aws:lambda:::function:GGIPDetector:1", "WorkerId": "40045de7-3e32-45f3-7a28-2ad3b928b062", "ProcessId": 5251, "WorkerState": "Waiting" }, { "FuncArn": "arn:aws:lambda:::function:GGStreamManager:1", "WorkerId": "4b4e993a-9464-4a43-68fe-31113d0c4d21", "ProcessId": 5155, "WorkerState": "Initialized" }, { "FuncArn": "arn:aws:lambda:::function:GGDeviceCertificateManager", "WorkerId": "616346ac-f018-4295-5944-124caaea79c5", "ProcessId": 5042, "WorkerState": "Waiting" }, { "FuncArn": "arn:aws:lambda:::function:GGConnManager", "WorkerId": "a1d487e4-d3c8-47de-7989-c4b4154931f3", "ProcessId": 5066, "WorkerState": "Waiting" }, { "FuncArn": "arn:aws:lambda:::function:GGShadowService", "WorkerId": "57be8acc-a220-4689-419e-9f6b0e7e6bad", "ProcessId": 5201, "WorkerState": "Waiting" }, { "FuncArn": "arn:aws:lambda:::function:GGTES", "WorkerId": "d57c9af3-4d54-41ee-664c-3c2a28630109", "ProcessId": 5124, "WorkerState": "Waiting" } ]
また、リクエストボディにチェック対象となるワーカー(Lambda)のARNを指定してPOSTすることで、特定のワーカーのヘルス情報を取得することが可能です。Greengrassのデフォルトで稼働するワーカーのARNは以下の通りです。
ワーカー名 | ARN | 役割 |
---|---|---|
GGCloudSpooler | arn:aws:lambda:::function:GGCloudSpooler:1 | IoT Core<->コアデバイス間のMQTTメッセージの送受信を管理するワーカー |
GGConnManager | arn:aws:lambda:::function:GGConnManager | コアデバイス<->デバイス間のMQTTメッセージをルーティングするワーカー |
GGDeviceCertificateManager | arn:aws:lambda:::function:GGDeviceCertificateManager | GGConnManagerが利用するサーバー証明書を生成するワーカー |
GGIPDetector | arn:aws:lambda:::function:GGIPDetector:1 | Greengrass GroupのデバイスがコアデバイスのIPアドレスを検出するために利用するサービスを管理する |
GGSecretManager | arn:aws:lambda:::function:GGSecretManager:1 | ローカルのシークレット管理を行うワーカー |
GGShadowService | arn:aws:lambda:::function:GGShadowService | ローカルシャドウを管理するワーカー |
GGShadowSyncManager | arn:aws:lambda:::function:GGShadowSyncManager | ローカルシャドウとクラウド上のデバイスシャドウを動悸するためのワーカー |
GGStreamManager | arn:aws:lambda:::function:GGStreamManager:1 | ストリームマネージャーのワーカー |
GGTES | arn:aws:lambda:::function:GGTES | Greengrass用IAMロールのクレデンシャルを取得するトークン交換サービス |
これらのワーカーに加えて、対象のCoreデバイスにデプロイしたローカルLambdaのARNも指定可能です。
試しにGGConnManager
とGGCloudSpooler
だけに限定してヘルスチェックを実行してみましょう
$ curl -XPOST http://localhost:8000/2016-11-01/health/workers --data '{"FuncArns": ["arn:aws:lambda:::function:GGConnManager","arn:aws:lambda:::function:GGCloudSpooler:1"]}'
以下のようなレスポンスが返却されます。
{ "Workers": [ { "FuncArn": "arn:aws:lambda:::function:GGCloudSpooler:1", "WorkerId": "9d08489c-9b37-49dc-6dcf-d205c20cc63f", "ProcessId": 5005, "WorkerState": "Waiting" }, { "FuncArn": "arn:aws:lambda:::function:GGConnManager", "WorkerId": "a1d487e4-d3c8-47de-7989-c4b4154931f3", "ProcessId": 5066, "WorkerState": "Waiting" } ], "InvalidArns": null }
(参考) https://docs.aws.amazon.com/greengrass/latest/developerguide/health-check.html
ストリームマネージャーのデータ出力先追加
Greengrass Core1.10からストリームマネージャーという機能が追加されています。
これまでストリームマネージャーのデータ出力先としては
- IoT Analytics
- Kinesis Data Streams
の2つがサポートされていましたが、さらに
- S3
- IoT SiteWise
が指定できるようになりました。
このアップデートに伴い、ストリームマネージャーのパラメータに以下のパラメータが追加されています。
- STREAM_MANAGER_READ_ONLY_DIRS
S3にアップロードするファイルを格納するディレクトリを指定するパラメータで、カンマ区切りで複数のディレクトリが指定可能です。ルートファイルシステム以外のパーティションもしくはルートファイルシステムの/tmp以下が指定可能です。
-
STREAM_MANAGER_EXPORTER_S3_DESTINATION_MULTIPART_UPLOAD_MIN_PART_SIZE_BYTES
S3へのマルチパートアップロードにおけるパートの最小サイズをバイト単位で指定するパラメータです。デフォルトおよび最小値は5Mとなります。
(参考)https://docs.aws.amazon.com/greengrass/latest/developerguide/configure-stream-manager.html
ローカルLambdaのランタイムとしてPython3.8のサポートを追加
そのままな内容ですが、ローカルLambdaのランタイムとしてPython3.8が選択可能になりました
設定ファイルのパラメータ追加
Greengrass Coreの設定ファイルconfig.jsonに以下の設定値が追加されました
- ggDaemonPort
Greengrass Coreが稼働するポート番号を指定できる設定値です。1024 ~ 65535の範囲で指定可能で、デフォルトは8000です。別のプログラムが8000ポートを使用しているようなユースケースにも対応できるようになりました。
-
systemComponentAuthTimeout
Greengrass Coreの認証完了までのタイムアウト値をミリ秒単位で指定できる設定値です。500 ~ 5000の範囲で指定可能で、デフォルトは5000です。
(参考)https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-core.html#config-json
設定可能なデバイス数とサブスクリプション数の上限が増加
以下の項目についてGrenngrass Groupごとに設定可能な上限値が増加しています。
- デバイス数の上限が200から2,500に増加
- サブスクリプション数の上限が1,000から10,000に増加
1台のコアデバイスでより多くのデバイスが管理できるようになったと言えます。
まとめ
前回リリース(1.10.0)から少し間が空いたこともあり、なかなか盛りだくさんなアップデートですね。これらの新機能を是非積極的に活用していきましょう!